package trabalho.das.fxml.views.controladores;

import comandos.ComandoDecorarTelha;
import entidades.Cor;
import entidades.Decorador;
import entidades.TelhaBase;
import entidades.Textura;
import java.io.File;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ColorPicker;
import javafx.scene.control.TextField;
import javafx.scene.paint.Color;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import sistema.ISistema;
import sistema.Sistema;
import trabalho.das.fxml.views.util.ConstantesGraficas;

/**
 * Trabalho DAS - 2014/2015
 * @author a21210380, a21190325, a21210392
 */
public class ControladorCriarDecorador {
    
    @FXML
    private TextField nomeDecorador;
    
    @FXML
    private ColorPicker corLinha;
    
    @FXML
    private CheckBox corLinhaReplace;
    
    @FXML
    private ColorPicker corTexto;
    
    @FXML
    private CheckBox corTextoReplace;
    
    @FXML
    private TextField caminhoFicheiro;
    
    @FXML
    private CheckBox texturaReplace;
    
    private final TelhaBase telha;
    
    public ControladorCriarDecorador(TelhaBase telha) {
        this.telha = telha;
    }
    
    @FXML
    private void onProcurarFicheiroPressionado(ActionEvent event) {
        FileChooser fileChooser = new FileChooser();
        fileChooser.setTitle("Open Resource File");
        fileChooser.getExtensionFilters().addAll(
                new FileChooser.ExtensionFilter("All Images", "*.*"),
                new FileChooser.ExtensionFilter("jpg", "*.jpg"),
                new FileChooser.ExtensionFilter("png", "*.png")
        );
        File fileSelected = fileChooser.showOpenDialog(((Stage) caminhoFicheiro.getScene().getWindow()));
        if (fileSelected == null) {
            System.out.println("No File Selected!");
            return;
        }

        caminhoFicheiro.setText(fileSelected.getAbsolutePath());
    }
    
    @FXML
    private void onCriarDecoradorPressionado(ActionEvent event) {
        String nome = nomeDecorador.getText();
        if (nome == null || nome.isEmpty()) {
            System.out.println("nomeDecorador == null || nomeDecorador == 0");
            nomeDecorador.setStyle(ConstantesGraficas.INVALID_INPUT_STYLE);
            return;
        }
        
        ISistema sistema = Sistema.getInstance();
        Textura textura = null;
        Cor linha = null;
        Cor texto = null;
        
        if(corLinhaReplace.isSelected()) {
            Color corLinhaTemp = corLinha.getValue();
            linha = sistema.getCor(
                corLinhaTemp.getRed(),
                corLinhaTemp.getGreen(),
                corLinhaTemp.getBlue(),
                corLinhaTemp.getOpacity());
        }
        if(corTextoReplace.isSelected()) {
            Color corLinhaTemp = corTexto.getValue();
            texto = sistema.getCor(
                corLinhaTemp.getRed(),
                corLinhaTemp.getGreen(),
                corLinhaTemp.getBlue(),
                corLinhaTemp.getOpacity());
        }
        if(texturaReplace.isSelected()) {
            String textCaminhoFicheiro = caminhoFicheiro.getText();
            if (textCaminhoFicheiro == null || textCaminhoFicheiro.isEmpty()) {
                caminhoFicheiro.setStyle(ConstantesGraficas.INVALID_INPUT_STYLE);
                System.out.println("textCaminhoFicheiro == null");
                return;
            }
            
            textura = sistema.getTextura(0, textCaminhoFicheiro);
        }
        
        Decorador de = new Decorador(nome, telha, linha, texto, textura);
        ComandoDecorarTelha d = new ComandoDecorarTelha(de);
        sistema.getGestorComandos().executeComando(d);
        
        ((Stage) caminhoFicheiro.getScene().getWindow()).close();
    }
    
    @FXML
    private void onCancelarPressionado(ActionEvent event) {
        ((Stage) caminhoFicheiro.getScene().getWindow()).close();
    }
}
